package com.sc.nft.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.dto.MallOrderRefundDTO;
import com.sc.nft.entity.MallOrderRefund;
import com.sc.nft.entity.dto.AdminPageRefundOrderDTO;

import java.util.List;

/**
 * ip商城售后业务层
 *
 * @author liGen
 * @version 1.0œ
 * @date 2023/11/17 5:47 下午
 */
public interface MallOrderRefundService {

    /**
     * 获取订单的有效金额售后订单
     *
     * @param orderId
     * @return
     */
    List<MallOrderRefund> getAmountInForceListByOrderId(Long orderId);

    /**
     * 订单是否存在售后中的售后单
     *
     * @param orderId
     * @return
     */
    Boolean whetherTheAfterSalesOrderExists(Long orderId);

    /**
     * 获取订单下的所有售后订单
     *
     * @param orderId
     * @return
     */
    List<MallOrderRefundDTO> getRefundListByOrderId(Long orderId);

    /**
     * 获取售后详情
     *
     * @param id
     * @return
     */
    MallOrderRefundDTO getDetailsById(Long id);

    /**
     * 获取售后
     *
     * @param id
     * @return
     */
    MallOrderRefund getById(Long id);

    /**
     * 取消售后
     *
     * @param id
     * @return
     */
    void cancelAfterSale(Long id);

    /**
     * 用户退货(编辑退货物流)
     *
     * @param id               售后单
     * @param userDeliveryNo   用户快递单号
     * @param userDeliveryName 用户快递名称
     * @return
     */
    void userReturn(Long id, String userDeliveryNo, String userDeliveryName);

    /**
     * 获取用户下的所有售后订单
     *
     * @param userId
     * @return
     */
    Page<MallOrderRefundDTO> getRefundListByUserId(Long userId, Integer pageNo, Integer pageSize);

    /**
     * 管理后台售后列表
     *
     * @param pageNo
     * @param pageSize
     * @param orderNo
     * @param refundNo
     * @param refundStatus
     * @param refundType
     * @param userTel
     * @return
     */
    Page<AdminPageRefundOrderDTO> getAdminPageRefundOrderDTO(Integer pageNo, Integer pageSize, String orderNo, String refundNo,
                                                             Integer refundStatus, Integer refundType, String userTel);

    /**
     * 管理后台售后详情
     *
     * @param id
     * @return
     */
    AdminPageRefundOrderDTO getAdminRefundOrderDTO(Long id);

    /**
     * 后台售后审核
     *
     * @param id               售后单ID
     * @param mallRefundStatus 售后单状态
     * @param ip               请求ip
     */
    void approvalRefund(Long id, int mallRefundStatus, String ip, String remark, String deliveryName, String deliveryNo, Boolean isAuto);

    /**
     * 通过售后编号获取售后单
     *
     * @param refundNo 售后编号
     * @return
     */
    MallOrderRefund getByNo(String refundNo);

    /**
     * 获取订单的退款成功的售后订单
     *
     * @param orderId
     * @return
     */
    List<MallOrderRefund> getRefundSuccessListByOrderId(Long orderId);

    /**
     * 售后单自动取消  待退货状态
     *
     * @param day
     */
    void theAfterSalesOrderIsAutomaticallyCancelled(Integer day);

    /**
     * 售后单自动换货完成  换货待收
     *
     * @param day
     */
    void afterSaleOrderAutomaticReplacementCompleted(Integer day);

    /**
     * 售后单自动同意  申请中
     *
     * @param day
     */
    void afterSalesOrderAutomaticallyAgreed(Integer day);

    /**
     * 数据处理
     */
    void dataProcessing();

    /**
     * 获取分享团的售后单
     *
     * @param teamId
     * @return
     */
    List<MallOrderRefund> getListByTeamOrder(Long teamId);
}
